/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef __SCSI_H__
#define __SCSI_H__

#include <scsi/scsi.h>
#include <sys/ioctl.h>
#include <mutex>

namespace Vmfs5IO {
struct ScsiIDLun {
    int fourInOne;
    int hostUniqueId;
};

class SCSI {
public:
    static SCSI *Instance();
    virtual ~SCSI() = default;

    /* Send a SCSI "reserve" command */
    int Reserve(int fd);

    /* Send a SCSI "release" command */
    int Release(int fd);

    /* get lun */
    int GetLUN(int fd);

private:
    SCSI() = default;
    static SCSI *m_instance;
    static std::mutex m_mutex;
};
}


#endif
